package com.cy.pj.sys.service.impl;

import com.cy.pj.common.annottion.RequiredLog;
import com.cy.pj.sys.dao.SysLogDao;
import com.cy.pj.sys.pojo.SysLog;
import com.cy.pj.sys.service.SysLogService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;

import java.util.List;
@Service
public class SysLogServiceImpl  implements SysLogService {

    @Autowired
    private SysLogDao sysLogDao;


    /**
     * @param sysLog
     * @Async 注解描述的方法为一个异步切入点方法,
     * 这个方法会在切面通知方法中通过一个新的线程调用执行,
     * 这里的线程由springboot内置的线程池提供.当springboot内置的线程池不能满足
     * 我们的需要时,我们还可以自定义线程池中线程的数量
     *
     * @Asycn的作用也自定义注解@RequiredLog的用法差不多,只是底层帮我们创建
     * 切面类,不需要我们自己写.
     */
    @Async
    @Override
    public void saveLog(SysLog sysLog) {
        String tName = Thread.currentThread().getName();
        System.out.println("SysLogService.saveLog.threadName=" + tName);
        try {
            Thread.sleep(100);
        } catch (Exception e) {
        }
        ;
        sysLogDao.insertLog(sysLog);
    }

    @RequiredLog(operation = "删除日志")
    @Override
    public int deleteLogs(Long... ids) {
        return sysLogDao.deleteById(ids);
    }

    @Override
    public SysLog findById(Long id) {
        return sysLogDao.selectById(id);
    }

    @Override
    public List<SysLog> findLogs(SysLog sysLog) {

        return sysLogDao.selectLogs(sysLog);
    }
}